{"cells":[{"metadata":{},"cell_type":"markdown","source":["# Première NSI - DS 1 - Correction\n"]},{"metadata":{},"cell_type":"markdown","source":["## Exercice 1 - Écritures des entiers\n","\n","### 1. Convertir (11010110)₂ en décimal\n","\n","En base 2, chaque position correspond à une puissance de 2. La position la plus à droite correspond à 2⁰.\n","\n","| Puissance | 2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |\n","| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n","| Valeur | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |\n","| Bit | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 |\n","| Contribution | 128 | 64 | 0 | 16 | 0 | 4 | 2 | 0 |\n","\n","On multiplie chaque bit par la puissance de 2 correspondant à sa position :\n","\n","(11010110)₂ \n","\n","= 1 × 2⁷ + 1 × 2⁶ + 0 × 2⁵ + 1 × 2⁴ + 0 × 2³ + 1 × 2² + 1 × 2¹ + 0 × 2⁰\n","\n","= 128 + 64 + 16 + 4 + 2\n","\n","= **214**.\n","\n","**Réponse : (11010110)₂ = (214)₁₀.**"]},{"metadata":{},"cell_type":"markdown","source":["### 2. Convertir (173)₁₀ en binaire\n","\n","On effectue des divisions euclidiennes successives par 2, jusqu'à obtenir un quotient nul.\n","\n","| Nombre à diviser | Quotient | Reste |\n","| --- | --- | --- |\n","| 173 | 86 | 1 |\n","| 86 | 43 | 0 |\n","| 43 | 21 | 1 |\n","| 21 | 10 | 1 |\n","| 10 | 5 | 0 |\n","| 5 | 2 | 1 |\n","| 2 | 1 | 0 |\n","| 1 | 0 | 1 |\n","\n","Les bits se lisent dans la colonne des restes **du bas vers le haut**. On obtient `10101101`.\n","\n","**Réponse : (173)₁₀ = (10101101)₂.**"]},{"metadata":{},"cell_type":"markdown","source":["### 3. Convertir (101101101101)₂ en hexadécimal\n","\n","Un chiffre hexadécimal correspond à un groupe de quatre bits, car 16 = 2⁴.\n","\n","On forme les groupes **en partant de la droite**. Ici, il y a déjà douze bits : on obtient trois groupes complets.\n","\n","**1011 | 0110 | 1101**\n","\n","| Groupe de quatre bits | Valeur décimale | Chiffre hexadécimal |\n","| --- | --- | --- |\n","| 1011 | 8 + 2 + 1 = 11 | B |\n","| 0110 | 4 + 2 = 6 | 6 |\n","| 1101 | 8 + 4 + 1 = 13 | D |\n","\n","En hexadécimal, les valeurs de 10 à 15 s'écrivent respectivement A, B, C, D, E et F.\n","\n","**Réponse : (101101101101)₂ = (B6D)₁₆.**"]},{"metadata":{},"cell_type":"markdown","source":["### 4. Convertir (2F4)₁₆ en décimal\n","\n","En base 16, les positions, de droite à gauche, correspondent à 16⁰, 16¹, 16², etc. Le chiffre F représente la valeur 15.\n","\n","(2F4)₁₆ \n","\n","= 2 × 16² + 15 × 16¹ + 4 × 16⁰\n","\n","= 2 × 256 + 15 × 16 + 4 × 1\n","\n","= 512 + 240 + 4\n","\n","= **756**.\n","\n","**Réponse : (2F4)₁₆ = (756)₁₀.**"]},{"metadata":{},"cell_type":"markdown","source":["### 5. Nombre de valeurs et plage sur 7 bits\n","\n","Chaque bit peut prendre deux valeurs : 0 ou 1. Avec sept bits, il y a donc :\n","\n","2⁷ = **128 valeurs différentes**.\n","\n","Pour des entiers naturels, le plus petit code est `0000000`, qui représente 0. Le plus grand est `1111111`, qui représente :\n","\n","2⁶ + 2⁵ + 2⁴ + 2³ + 2² + 2¹ + 2⁰ = 2⁷ − 1 = 127.\n","\n","**Réponse : on peut coder 128 valeurs, soit les entiers de 0 à 127 inclus.**\n","\n","La borne maximale vaut 127, car 0 fait partie des 128 valeurs."]},{"metadata":{},"cell_type":"markdown","source":["## Exercice 2 - Complément à deux sur 8 bits\n","\n","### 1. Plage des entiers relatifs représentables\n","\n","En complément à deux sur n bits, les valeurs représentables vont de −2ⁿ⁻¹ à 2ⁿ⁻¹ − 1.\n","\n","Sur huit bits, cela donne :\n","\n","−2⁷ = **−128** et 2⁷ − 1 = **127**.\n","\n","**Réponse : les entiers de −128 à 127 inclus.**"]},{"metadata":{},"cell_type":"markdown","source":["### 2. Coder −18 en complément à deux sur 8 bits\n","\n","Pour coder un entier négatif, on écrit d'abord la valeur positive sur huit bits, puis on inverse tous les bits et on ajoute 1.\n","\n","**Étape 1 : écrire 18 sur huit bits.**\n","\n","18 = 16 + 2 = 2⁴ + 2¹, donc 18 s'écrit `00010010`.\n","\n","**Étape 2 : inverser les huit bits.**\n","\n","Chaque 0 devient 1 et chaque 1 devient 0. On obtient `11101101`.\n","\n","**Étape 3 : ajouter 1.**\n","\n","`11101101` + `00000001` = `11101110`.\n","\n","**Réponse : −18 est représenté par `11101110`.**\n"]},{"metadata":{},"cell_type":"markdown","source":["### 3. Décoder 11110010 en complément à deux sur 8 bits\n","\n","Le bit le plus à gauche vaut 1 : l'entier représenté est **négatif**.\n","\n","**retrouver la valeur positive opposée.**\n","\n","On inverse les bits : `11110010` devient `00001101`.\n","\n","On ajoute 1 : `00001101` + `00000001` = `00001110`.\n","\n","Or `00001110` représente 8 + 4 + 2 = 14. L'entier d'origine étant négatif, il vaut **−14**.\n","\n","**Réponse : `11110010` représente −14.**\n"]},{"metadata":{},"cell_type":"markdown","source":["## Exercice 3 - Lire un programme Python"]},{"metadata":{"trusted":true},"cell_type":"code","source":["from tutor import tutor\n","\n","somme = 0\n","compteur = 0\n","for n in range(1, 8):\n"," if n % 3 == 0:\n"," somme = somme + n * n\n"," compteur = compteur + 1\n","print(somme, compteur)\n","\n","tutor()"],"execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":["### 1. Tableau de suivi\n","\n","Les valeurs de `somme` et de `compteur` indiquées dans le tableau sont celles obtenues **après chaque passage** dans la boucle.\n","\n","| n | n % 3 | n % 3 == 0 | Calcul effectué | somme | compteur |\n","| --- | --- | --- | --- | --- | --- |\n","| 1 | 1 | Faux | Aucune modification | 0 | 0 |\n","| 2 | 2 | Faux | Aucune modification | 0 | 0 |\n","| 3 | 0 | Vrai | 0 + 3 × 3 = 9 | 9 | 1 |\n","| 4 | 1 | Faux | Aucune modification | 9 | 1 |\n","| 5 | 2 | Faux | Aucune modification | 9 | 1 |\n","| 6 | 0 | Vrai | 9 + 6 × 6 = 45 | 45 | 2 |\n","| 7 | 1 | Faux | Aucune modification | 45 | 2 |\n","\n","Pour n = 3, on ajoute 3² = 9 et on augmente `compteur` de 1. Pour n = 6, on ajoute 6² = 36 et on augmente encore `compteur` de 1.\n","\n","Quand le test est faux, les variables conservent leur valeur : elles ne sont pas remises à zéro."]},{"metadata":{},"cell_type":"markdown","source":["### 2. Affichage de la dernière ligne\n","\n","À la fin de la boucle :\n","\n","- `somme` vaut 3² + 6² = 9 + 36 = **45** ;\n","- `compteur` vaut **2**, car deux valeurs ont satisfait le test.\n","\n","`print(somme, compteur)` affiche les deux valeurs sur une même ligne, séparées par un espace :\n","\n","```text\n","45 2\n","```"]},{"metadata":{},"cell_type":"markdown","source":["### 3. Rôle du test n % 3 == 0\n","\n","L'opérateur `%` donne le reste de la division euclidienne. Ainsi, `n % 3` est le reste de la division de n par 3."]},{"metadata":{},"cell_type":"markdown","source":["## Exercice 4 - Écrire des programmes Python\n","\n","### 1. Tarif d'entrée\n","\n","La fonction `tarif(age)` doit **renvoyer** le prix correspondant à l'âge.\n","\n","| Âge | Tarif |\n","| --- | --- |\n","| Moins de 12 ans | 4 € |\n","| De 12 à 17 ans inclus | 6 € |\n","| 18 ans ou plus | 10 € |"]},{"metadata":{"correction_exemple":{"saisies":["11"]},"trusted":true},"cell_type":"code","source":["def tarif(age):\n"," if age < 12:\n"," return 4\n"," elif age < 18:\n"," return 6\n"," else:\n"," return 10\n","\n","age = int(input(\"Saisir un âge entier : \"))\n","print(\"Tarif :\", tarif(age), \"€\")"],"execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":["### 2. Somme et nombre des entiers divisibles par 4"]},{"metadata":{"correction_exemple":{"saisies":["5","8","12","7","16","0"]},"trusted":true},"cell_type":"code","source":["somme = 0\n","compteur = 0\n","nombre = int(input(\"Saisir un entier positif (0 pour arrêter) : \"))\n","\n","while nombre != 0:\n"," if nombre % 4 == 0:\n"," somme = somme + nombre\n"," compteur = compteur + 1\n"," nombre = int(input(\"Saisir un entier positif (0 pour arrêter) : \"))\n","\n","print(\"Somme :\", somme)\n","print(\"Nombre d'entiers divisibles par 4 :\", compteur)"],"execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"title":"Première NSI - Corrigé détaillé du DS de 1 heure"},"nbformat":4,"nbformat_minor":2}